package avicit.im.lantop.basic.reportmanager.service;

import java.util.List;
import java.util.Map;

import avicit.im.lantop.basic.reportmanager.domain.LantopReportConfigDetails;
import avicit.im.lantop.basic.reportmanager.domain.LantopReportTemplate;
import avicit.platform6.commons.utils.web.TreeNode;
import avicit.platform6.core.dao.Paging;
import avicit.platform6.core.domain.BeanBase;
//import avicit.platform6.core.jdbc.Page;
import com.github.pagehelper.Page;

/**
 * <p>金航数码科技有限责任公司</p>
 * <p>作者：张欢欢</p>
 * <p>邮箱：xtcqw369@163.com</p>
 * <p>创建时间： 2015-11-3 下午2:08:36 </p>
 * <p>类说明：报表管理接口类</p>
 * <p>修改记录： </p>
 */
public interface ReportManagerServices {

	/**
	 * TODO 递归查询树结构
	 * @param id		根ID
	 * @param level			层级
	 * @param orgId 	组织ID
	 * @param orgIdentity 	组织应用Id
	 * @param contextPath	上下文路径，用于存储报表模板
	 * @param 
	 * @return 
	 * @throws
	 */
	List<TreeNode> getTreeExerciseByParentId(String id, String orgId,String orgIdentity,int level, String contextPath);

	/**
	 * TODO 插入模板树数据
	 * @param paramsMap		属性集合
	 * @return String		记录ID
	 * @throws
	 */
	String insertIntoLantopReportTreeForUpload(Map<String, String> paramsMap);

	/**
	 * TODO 保存模板树
	 * @param paramsMap		参数集合
	 * @return boolean
	 * @throws
	 */
	boolean saveLantopReport(Map<String, Object> paramsMap);

	/**
	 * TODO 插入模板树数据
	 * @param paramsMap		属性集合
	 * @return String		记录ID
	 * @throws
	 */
	boolean insertIntoLantopReportTree(Map<String, Object> paramsMap);

	/**
	 * TODO 删除树节点
	 * @param paramsMap
	 * @return boolean
	 * @throws
	 */
	boolean deleteLantopReportTree(Map<String, Object> paramsMap);

	/**
	 * TODO 保存用户自定义数据源
	 * @param paramsMap
	 * @return boolean
	 * @throws
	 */
	boolean saveUseCustomDataSource(Map<String, Object> paramsMap);

	/**
	 * TODO 根据模板ID查找其对应的字段配置信息
	 * @param paramsMap	
	 * @param page void
	 * @throws
	 */
	void findFieldInfosByReportid(Map<String, Object> paramsMap, Page<Map<String, Object>> page);

	/**
	 * TODO 根据模板ID删除其对应的字段配置信息
	 * @param paramsMap
	 * @return boolean
	 * @throws
	 */
	boolean deleteFieldInfosById(Map<String, Object> paramsMap);

	/**
	 * TODO 保存DataBase数据
	 * @param paramsMap	属性集合
	 * @return boolean
	 * @throws
	 */
	boolean saveDataBaseConfigForTable(Map<String, Object> paramsMap);

	/**
	 * TODO 查找用户自定义数据源应输出字段
	 * @param reportId		模板ID
	 * @param paramsMap		额外参数
	 * @return List<String>
	 * @throws
	 */
	List<String> findUseCustomDataSourceFields(String reportId, Map<String, Object> paramsMap);

	/**
	 * TODO  查找来源于数据库模板应输出字段
	 * @param reportId		模板ID
	 * @param paramsMap		额外参数
	 * @return List<String>
	 * @throws
	 */
	List<String> findDataSourceFields(String reportId, Map<String, Object> paramsMap);

	/**
	 * TODO 查找模板实际输出字段列表
	 * @param argsMaps
	 * @return List<Map<String,Object>>
	 * @throws
	 */
	List<Map<String, Object>> findReportSetField(Map<String, String> argsMaps);

	/**
	 * TODO 查询DataSource数据表
	 * @param argsMaps
	 * @return List<Map<String,Object>>
	 * @throws
	 */
	List<Map<String, Object>> findDataSource(Map<String, String> argsMaps);

	/**
	 * TODO 通过配置表名，查找已配置过的模板树
	 * @param paramsMap
	 * @return List<TreeNode>
	 * @throws
	 */
	List<TreeNode> findTreeByTableName(Map<String, Object> paramsMap);

	/**
	 * TODO  根据ReportId，删除已经配置过的字段信息
	 * @param paramsMap
	 * @return boolean
	 * @throws
	 */
	boolean deleteSetField(Map<String, Object> paramsMap);

	/**
	 * 查询二维码信息
	 * @param nodeId
	 */
	List<Map<String, Object>> findRuleInfoById(String nodeId);

	/**
	 * 根据表ID获取二维码规则信息
	 * @author 郭亮
	 * @param tableId
	 * @return List<Map<String,Object>>
	 */
	public List<Map<String, Object>> findRuleInfoByTableId(String tableId);

	/**
	 * 根据表ID和数据节点ID获取二维码规则信息
	 * @param tableId
	 * @param nodeId
	 * @return List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> findRuleInfoByTableId(String tableId, String nodeId);

	public String getReportRealNameById(String reportId) throws Exception;

	public void deleteReportRelation(String reportId, String tableName,String orgId) throws Exception;
	
	public List<Map<String, Object>> getPublicFieldInfo();
	
	/**
	 * 递归获取Tree当前节点下数据
	 * 
	 * @param id
	 *            当前节点
	 * @param level
	 *            需要获取的层数
	 * @return 节点集合
	 */
	public List<TreeNode> recurFindTreeNodesByParentId(String id, int level, String orgId);
	
	public List<Map<String, Object>> findTablesByNodeId(String nodeId,String orgId);
	
	/**
	 * 保存报表临时数据表信息
	 * @param reportTemplate
	 * @return String
	 * @throws
	 */
	public String saveReportTemplate(LantopReportTemplate reportTemplate);
	
	/**
	 * 通过id获取报表临时表数据
	 * @param id
	 * @return LantopReportTemplate
	 * @throws
	 */
	public LantopReportTemplate getLantopReportTemplateById(String id);
	
	public void deleteLantopReportTemplate();
	
	/**
	 * 通过报表模板id查询报表配置规则主表
	 * @param templateId
	 * @return String
	 */
	public String findLantopReportConfigurationByTemplateId(String templateId);

	/**
	 * 保存报表模板配置规则主表
	 * @param bean
	 * @return 
	 */
	public void saveLantopReportConfiguration(BeanBase bean);
	
	/**
	 * 报表模板配置规则子表查询
	 * 
	 * @param configType 配置类型
	 * @param templateId 报表模板Id
	 * @param sysId 系统ID
	 * @return Paging<LantopReportConfigDetails>
	 * @throws Exception
	 */
	public Paging<LantopReportConfigDetails> getReportConfig(Paging<LantopReportConfigDetails> page,Map<String, Object> parameter) throws Exception;

	/**
	 * 报表模板配置规则保存子表
	 * 
	 * @param bean
	 */
	public void saveReportConfig(BeanBase bean);
	
	/**
	 * 报表模板配置规则更新子表
	 * 
	 * @param bean
	 * @throws Exception
	 */
	public void updateReportConfig(BeanBase bean);
	
	/**
	 * 报表模板配置规则子表根据id删除数据
	 * 
	 * @param ids
	 */
	public void deleteReportConfigByIds(String ids);
	
	
	/**
	 * 通过子表id查询主表
	 * @param id
	 * @return String
	 */
	public String findLantopReportConfigurationIdById(String id);
	
	/**
	 * 通过主表id查询子表数据个数
	 * @param id
	 * @return int
	 */
	public int findLantopReportConfigDetailsByPid(String pid);
	
	/**
	 * 根据id删除报表模板配置规则主表
	 * @param id
	 * @return LantopReportConfigDetails
	 * @throws
	 */
	public void deleteLantopReportConfigurationById(String id);
	
	/**
	 * 根据某一字段查询对象
	 * 
	 */
	public List<?> getListByColumnValue(Class<?> c, String column, String value);
	
	/**
	 * 主表id子表查询
	 * @param pid，configType
	 * @return List<Map<String, Object>>
	 */
	public List<Map<String, Object>> findLantopReportConfigDetailsByTemplateId(String pid, String configType);
	
	/**
	 * 模板id查询报表配置
	 * @param templateId
	 * @return List<Map<String, Object>>
	 */
	public List<Map<String, Object>> findLantopReportConfigByTemplateId(String templateId);
	
	/**
	 * TODO 根据模板ID保存存储应输出字段
	 * @param sysId  系统ID
	 * @param templateId  模板ID
	 * @param outputFields 应输出字段
	 * @throws
	 */
	public void saveLantopReportField(String sysId, String templateId, String outputFields);
}
